package com.cmc.cloud.cmclink.doc.service.so;

import com.cmc.cloud.cmclink.doc.entity.OperateLogDO;
import com.cmc.cloud.cmclink.doc.vo.sovo.operatelog.OperateLogCreateReqVO;
import com.cmc.cloud.cmclink.doc.vo.sovo.operatelog.OperateLogReqVO;
import com.cmc.cloud.cmclink.doc.vo.sovo.operatelog.OperateLogRespVO;
import com.cmc.cloud.cmclink.doc.vo.sovo.operatelog.OperateLogUpdateReqVO;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;

/**
 * doc_operate_log Service 接口
 *
 * @author 集运管理员
 */
public interface OperateLogService {

    /**
     * 创建doc_operate_log
     *
     * @param createReqVO 创建信息
     * @return id
     */
    Long createOperateLog(@Valid OperateLogCreateReqVO createReqVO);

    /**
     * 更新doc_operate_log
     *
     * @param updateReqVO 更新信息
     */
    void updateOperateLog(@Valid OperateLogUpdateReqVO updateReqVO);

    /**
     * 删除doc_operate_log
     *
     * @param id 编号
     */
    void deleteOperateLog(Long id);

    /**
     * 获得doc_operate_log
     *
     * @param id 编号
     * @return doc_operate_log
     */
    OperateLogDO getOperateLog(Long id);

    /**
     * 获得doc_operate_log列表
     *
     * @param ids 编号
     * @return doc_operate_log列表
     */
    List<OperateLogDO> getOperateLogList(Collection<Long> ids);

    /**
     * 新增doc_operate_log列表
     *
     * @param operateList 操作
     * @param businessType 业务类型
     * @param operateType 操作类型 一级
     * @param operateTypeSub 拒绝/同意/待定
     * @param operateTypeThird 详细类型，拒绝详细类型
     * @param operateDesc 详细理由
     * @return doc_operate_log列表
     */
    List<OperateLogDO> batchInsert(List<OperateLogReqVO> operateList, String businessType,
                                   String operateType, String operateTypeSub,
                                   String operateTypeThird, String operateDesc);

    /**
     * 获得doc_operate_log列表
     *
     * @param businessType 编号
     * @param businessId   编号
     * @return doc_operate_log列表
     */
    List<OperateLogRespVO> selectByBusinessId(String businessType, Long businessId);

    /**
     * 获得doc_operate_log列表
     *
     * @param businessType    编号
     * @param businessId      编号
     * @param operateTypeSubs 主操作流程类型
     * @return doc_operate_log列表
     */
    List<OperateLogRespVO> selectByBusinessId(String businessType, Long businessId, List<String> operateTypeSubs);

}
